package org.groupg.filetodb.model.database;

import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;

import java.io.Serializable;

/**
 * 表示数据库函数元数据
 */
public class Function implements Serializable {
    /** 函数目录 */
    private String functionCat;
    /** 函数模式 */
    private String functionSchem;
    /** 函数名 */
    private String functionName;
    /** 函数备注 */
    private String remarks;
    /** 函数类型 (DatabaseMetaData.functionXXX) */
    private short functionType;
    /** 特定名称（唯一标识） */
    private String specificName;

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .add("functionCat", functionCat)
                .add("functionSchem", functionSchem)
                .add("functionName", functionName)
                .add("remarks", remarks)
                .add("functionType", functionType)
                .add("specificName", specificName)
                .toString();
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        Function function = (Function) o;
        return getFunctionType() == function.getFunctionType() && Objects.equal(getFunctionCat(), function.getFunctionCat()) && Objects.equal(getFunctionSchem(), function.getFunctionSchem()) && Objects.equal(getFunctionName(), function.getFunctionName()) && Objects.equal(getRemarks(), function.getRemarks()) && Objects.equal(getSpecificName(), function.getSpecificName());
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(getFunctionCat(), getFunctionSchem(), getFunctionName(), getRemarks(), getFunctionType(), getSpecificName());
    }

    public String getFunctionCat() {
        return functionCat;
    }

    public void setFunctionCat(String functionCat) {
        this.functionCat = functionCat;
    }

    public String getFunctionSchem() {
        return functionSchem;
    }

    public void setFunctionSchem(String functionSchem) {
        this.functionSchem = functionSchem;
    }

    public String getFunctionName() {
        return functionName;
    }

    public void setFunctionName(String functionName) {
        this.functionName = functionName;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }

    public short getFunctionType() {
        return functionType;
    }

    public void setFunctionType(short functionType) {
        this.functionType = functionType;
    }

    public String getSpecificName() {
        return specificName;
    }

    public void setSpecificName(String specificName) {
        this.specificName = specificName;
    }
}
